<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>C语言程序（有一点pp）实现PVZ一代修改，探索记录 (随缘更新).md | 蓝湖畔淅淅沥沥的雨</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="说明 - 2022-05-05 本篇博客为本人原创, 原发布于CSDN, 在搭建个人博客后使用爬虫批量爬取并挂到个人博客, 出于一些技术原因博客未能完全还原到初始版本(而且我懒得修改), 在观看体验上会有一些瑕疵 ,若有需求会发布重制版总结性新博客。发布时间统一定为1111年11月11日。钦此。  wscb 只用过CE 建议食用前先熟悉CE基本操作  游戏版本 Plants_Vs_Zombies">
<meta property="og:type" content="article">
<meta property="og:title" content="C语言程序（有一点pp）实现PVZ一代修改，探索记录 (随缘更新).md">
<meta property="og:url" content="http://example.com/1111/11/11/C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%EF%BC%88%E6%9C%89%E4%B8%80%E7%82%B9pp%EF%BC%89%E5%AE%9E%E7%8E%B0PVZ%E4%B8%80%E4%BB%A3%E4%BF%AE%E6%94%B9%EF%BC%8C%E6%8E%A2%E7%B4%A2%E8%AE%B0%E5%BD%95%20(%E9%9A%8F%E7%BC%98%E6%9B%B4%E6%96%B0)/index.html">
<meta property="og:site_name" content="蓝湖畔淅淅沥沥的雨">
<meta property="og:description" content="说明 - 2022-05-05 本篇博客为本人原创, 原发布于CSDN, 在搭建个人博客后使用爬虫批量爬取并挂到个人博客, 出于一些技术原因博客未能完全还原到初始版本(而且我懒得修改), 在观看体验上会有一些瑕疵 ,若有需求会发布重制版总结性新博客。发布时间统一定为1111年11月11日。钦此。  wscb 只用过CE 建议食用前先熟悉CE基本操作  游戏版本 Plants_Vs_Zombies">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="1111-11-11T03:06:11.000Z">
<meta property="article:modified_time" content="2022-05-06T08:07:32.408Z">
<meta property="article:author" content="StarsWhisper">
<meta property="article:tag" content="OldBlog(Before20220505)">
<meta property="article:tag" content="逆向">
<meta property="article:tag" content="内存修改">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/atom.xml" title="蓝湖畔淅淅沥沥的雨" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  
<link rel="stylesheet" href="/css/style.css">

  
<link rel="stylesheet" href="/plugin/bganimation/bg.css">

  

  <link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css" rel="stylesheet" type="text/css">
<meta name="generator" content="Hexo 6.1.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <div class="outer">
        <div class="widget-wrap mobile-header">
  <h3 class="widget-title"></h3>
  <div class="widget">
    <img class="avatar" src="/images/avatar.png">
    <h2 class="author">StarsWhisper</h2>
    <h3 class="description"></h3>
    <div class="count-box">
      <a href="/archives"><div><strong>75</strong><br>文章</div></a>
      <a href="/categories"><div><strong>31</strong><br>分类</div></a>
      <a href="/tags"><div><strong>56</strong><br>标签</div></a>
    </div>
    <ul class="blog-link">
     
          <a href="/" title="Home">
            <li>主页</li>
          </a>
        
          <a href="/archives" title="Archives">
            <li>归档</li>
          </a>
        
          <a href="/categories" title="Categories">
            <li>分类</li>
          </a>
        
          <a href="/tags" title="Tags">
            <li>标签</li>
          </a>
        
          <a href="/knightabout" title="Knightabout">
            <li>关于</li>
          </a>
        
          <a href="/bridges" title="Bridges">
            <li>传送门</li>
          </a>
        
          <a href="/announcement" title="Announcement">
            <li>公告</li>
          </a>
        
    </ul>
  </div>
</div>

        <section id="main"><article id="post-C语言程序（有一点pp）实现PVZ一代修改，探索记录 (随缘更新)" class="wow slideInRight article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/1111/11/11/C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%EF%BC%88%E6%9C%89%E4%B8%80%E7%82%B9pp%EF%BC%89%E5%AE%9E%E7%8E%B0PVZ%E4%B8%80%E4%BB%A3%E4%BF%AE%E6%94%B9%EF%BC%8C%E6%8E%A2%E7%B4%A2%E8%AE%B0%E5%BD%95%20(%E9%9A%8F%E7%BC%98%E6%9B%B4%E6%96%B0)/" class="article-date">
  <time class="post-time" datetime="1111-11-11T03:06:11.000Z" itemprop="datePublished">
    <span class="post-month">11月</span><br/>
    <span class="post-day">11</span>
  </time>
</a>
   
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      C语言程序（有一点pp）实现PVZ一代修改，探索记录 (随缘更新).md
    </h1>
  

        <div>
          
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E6%95%99%E7%BB%83%E6%88%91%E6%83%B3%E5%AD%A6%E6%8C%82%E8%BE%B9%E8%BA%B2%E7%89%9B/">教练我想学挂边躲牛</a>,<a class="article-category-link" href="/categories/%E6%95%99%E7%BB%83%E6%88%91%E6%83%B3%E5%AD%A6%E6%8C%82%E8%BE%B9%E8%BA%B2%E7%89%9B/%E9%80%86%E5%90%91/">逆向</a>
  </div>

          
              

          
        </div>
      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h2 id="说明-2022-05-05"><a class="markdownIt-Anchor" href="#说明-2022-05-05"></a> 说明 - 2022-05-05</h2>
<p>本篇博客为本人原创, 原发布于CSDN, 在搭建个人博客后使用爬虫批量爬取并挂到个人博客, 出于一些技术原因博客未能完全还原到初始版本(而且我懒得修改), 在观看体验上会有一些瑕疵 ,若有需求会发布重制版总结性新博客。发布时间统一定为1111年11月11日。钦此。</p>
<h3 id="wscb-只用过ce"><a class="markdownIt-Anchor" href="#wscb-只用过ce"></a> wscb 只用过CE</h3>
<p>建议食用前先熟悉CE基本操作</p>
<h3 id="游戏版本"><a class="markdownIt-Anchor" href="#游戏版本"></a> 游戏版本</h3>
<p>Plants_Vs_Zombies_V1.0.0.1051_EN</p>
<h1 id="0找到pvz进程"><a class="markdownIt-Anchor" href="#0找到pvz进程"></a> 0.找到PVZ进程</h1>
<p><strong>这一步是之后对内存操作的基础</strong><br />
导入windows.h头文件， 我们就可以使用winAPI，于是我们可以根据窗口标题找到游戏进程。</p>
<h4 id="1找到pvz窗口的句柄hwnd类型"><a class="markdownIt-Anchor" href="#1找到pvz窗口的句柄hwnd类型"></a> 1.找到PVZ窗口的句柄(HWND类型)</h4>
<p>使用winAPI FindWindow， 下方代码展现了他的一种用法</p>
<h4 id="2找到pvz进程iddword类型"><a class="markdownIt-Anchor" href="#2找到pvz进程iddword类型"></a> 2.找到PVZ进程ID（DWORD类型）</h4>
<p>DWORD即无符号int<br />
使用API GetWindowThreadProcessId</p>
<h4 id="3找到进程句柄handle类型"><a class="markdownIt-Anchor" href="#3找到进程句柄handle类型"></a> 3.找到进程句柄（HANDLE类型）</h4>
<p>使用API OpenProcess</p>
<p>​</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function">HANDLE <span class="title">CatchPvzProcessByTitle</span><span class="params">(LPCTSTR ProcessTitleName)</span></span>&#123;</span><br><span class="line">    HWND hwnd = <span class="built_in">FindWindow</span>(<span class="literal">NULL</span>, ProcessTitleName);</span><br><span class="line">    DWORD processID = <span class="number">0</span>;</span><br><span class="line">    HANDLE PVZprocess = <span class="literal">NULL</span>;</span><br><span class="line">    <span class="built_in">GetWindowThreadProcessId</span>(hwnd, &amp;processID);</span><br><span class="line">    <span class="keyword">if</span>(!processID) <span class="keyword">return</span> <span class="literal">NULL</span>;</span><br><span class="line">    PVZprocess = <span class="built_in">OpenProcess</span>(PROCESS_ALL_ACCESS,FALSE,processID);</span><br><span class="line">    <span class="keyword">return</span> PVZprocess;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h1 id="1修改阳光"><a class="markdownIt-Anchor" href="#1修改阳光"></a> 1.修改阳光</h1>
<h4 id="1找地址"><a class="markdownIt-Anchor" href="#1找地址"></a> 1.找地址</h4>
<p>使用CE精确数值搜索，可以轻易确定阳光地址<br />
<s>1.5 好的我们来寻找基址， 找基址的方法是直接莽(因为真不会找)， 然后就找到了！</s></p>
<h4 id="2找基址偏移"><a class="markdownIt-Anchor" href="#2找基址偏移"></a> 2.找基址+偏移</h4>
<p>找到阳光的基址和偏移， 发现是<br />
[ [ [ p o p c a p g a m e 1. e x e + 2 A 9 E C 0 ] + 768 ] + 5560 ]<br />
[[[popcapgame1.exe+2A9EC0] + 768] + 5560]<br />
[[[popcapgame1.exe+2A9EC0]+768]+5560]<br />
而pvz起始申请的地址固定是0x400000, 所以起始地址是62A9EC0</p>
<h4 id="3修改内存内容"><a class="markdownIt-Anchor" href="#3修改内存内容"></a> 3.修改内存内容</h4>
<p>我们可以调用两个winAPI来读写内存: 这里意识流地介绍一点用法， 具体建议自己去查，因为作者也不会</p>
<p>​</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">WriteProcessMemory</span><br><span class="line">ReadProcessMemory</span><br><span class="line">参数：</span><br><span class="line">(pvz进程句柄，地址，新值/读取值保存地址，数据大小，NULL)</span><br><span class="line">返回值：</span><br><span class="line">bool类型， 读写失败会返回0</span><br></pre></td></tr></table></figure>
<p>先读地址，确定目标地址是否可以访问， 若成功读取，则修改之。<br />
（如果在选择游戏模式界面， 显然不能修改阳光值， 或者你的地址写错了，也无法修改，所以要先读，如果读取能成功，可以排除一部分问题）</p>
<h4 id="4没什么用的总结"><a class="markdownIt-Anchor" href="#4没什么用的总结"></a> 4.没什么用的总结</h4>
<p>若正确开始了一句游戏，找到了正确的阳光基址以及偏移量，正确调用修改内存的函数，便可以成功修改阳光数值。</p>
<h1 id="2-卡片无冷却"><a class="markdownIt-Anchor" href="#2-卡片无冷却"></a> 2. 卡片无冷却</h1>
<h4 id="一些探索"><a class="markdownIt-Anchor" href="#一些探索"></a> 一些探索</h4>
<h6 id="1"><a class="markdownIt-Anchor" href="#1"></a> 1.</h6>
<p>刚开始根据网上搜索的思路，以1字节为单位搜索，可以找到卡片是否在冷却的标志位，1代表准备就绪，0代表正在冷却。</p>
<h6 id="2"><a class="markdownIt-Anchor" href="#2"></a> 2.</h6>
<p>当你点击卡片，卡片就会变暗，这说明你点击卡片的同时，游戏修改了标志位的数值。</p>
<h6 id="3"><a class="markdownIt-Anchor" href="#3"></a> 3.</h6>
<p>生成反汇编代码，把mov [标志位地址], 00 的改为 01，这样点击卡片时，即标志位数值不变，即可让卡片无冷却。<br />
但这样会遇到一些问题， 这种操作只是“ <strong>不让卡片从就绪状态进入冷却状态”</strong> ， 如果你先使用卡片，在卡片冷却是修改代码，<br />
<strong>正在冷却的卡片是不会立刻准备就绪</strong> 的。</p>
<h6 id="4"><a class="markdownIt-Anchor" href="#4"></a> 4.</h6>
<p>遇到了另一个问题，在寻找基址的过程中，有一个中间步骤为[edi + 24], 但查找edi的值时无匹配项， 寻找基址无果。好在后来通过一个等价地址[eax</p>
<ul>
<li>ecx + 70]寻得，至于为何用到了两个寄存器做偏移， 当时未知， 之后探索出来了。</li>
</ul>
<h6 id="5"><a class="markdownIt-Anchor" href="#5"></a> 5.</h6>
<p>后来经过玄学+盯代码+猜+不严谨证明，习得了部分卡槽机制。</p>
<ul>
<li>
<p>每个卡槽都有一个“已经冷却了多长时间”的计时(即反汇编代码中的[edi + 24]), 这个计时会从冷却开始时增加。</p>
</li>
<li>
<p>每个卡槽都会根据所选植物不同有一个冷却时长(即反汇编代码中的[edi + 28])，当卡槽冷却计时达到了这个冷却时长，则冷却计时置0， 卡片进入就绪状态。</p>
</li>
<li>
<p>相邻卡槽冷却标志位地址做差，可以得到80(0x50)， 相邻卡槽冷却计时的地址做差，可以得到80(0x50)， 且对于同一卡槽，其冷却计时地址相对其冷却标志位地址的偏移为-36<br />
.</p>
</li>
<li>
<p>可以推测出，储存卡槽信息的是一系列连续的结构体，每个结构体占用0x50Byte的空间， 而经验证，双偏移中的[eax + ecx + 70]eax是50的倍数，即使第几个卡槽，可以直接通过ecx找到基址</p>
</li>
</ul>
<h4 id="卡片无冷却的修改方法"><a class="markdownIt-Anchor" href="#卡片无冷却的修改方法"></a> 卡片无冷却的修改方法</h4>
<p>找到了许多种，但未能深入理解代码</p>
<p>在反汇编代码中，<br />
冷却计时每次加1，通过不断的类似这样的循环，实现冷却恢复。只要冷却计时小于等于(jle)目标时间，循环就继续，游戏中的卡片冷却进度条也不断刷新。</p>
<blockquote>
<p>冷却计时+1<br />
mov, eax , 冷却计时<br />
cmp eax，目标时间<br />
把eax sub成0</p>
</blockquote>
<h6 id="1-修改反汇编代码固定地址0x487290处3个字节"><a class="markdownIt-Anchor" href="#1-修改反汇编代码固定地址0x487290处3个字节"></a> 1. 修改反汇编代码，固定地址0x487290处3个字节</h6>
<p>每次冷却计时+1， 把对应mov [xxx] 01改为 00，即冷却计时一直是0，可以实现卡片无冷却（貌似计时置0后循环就会跳出）。</p>
<h6 id="2-修改反汇编代码固定地址0x487296处1个字节"><a class="markdownIt-Anchor" href="#2-修改反汇编代码固定地址0x487296处1个字节"></a> 2. 修改反汇编代码，固定地址0x487296处1个字节</h6>
<p>把jle 改成ja(判大于)， 直接结束循环，之后卡片冷却标志位置1，实现无冷却</p>
<h6 id="3修改反汇编代码以及内存数据"><a class="markdownIt-Anchor" href="#3修改反汇编代码以及内存数据"></a> 3.修改反汇编代码以及内存数据</h6>
<p>先修改“使得卡片标志位变为00”的mov代码为01，使卡片不会从就绪状态进入冷却状态，然后通过时间计数+固定偏移36（0x28）修改所有卡槽的标志位为01，令正在冷却中的卡片刷新。</p>
<h6 id="没用的东西"><a class="markdownIt-Anchor" href="#没用的东西"></a> 没用的东西</h6>
<p>作者在CE中使用了这三种方法，但只选择方法2进行了代码实现</p>
<h1 id="3阳光自动收集"><a class="markdownIt-Anchor" href="#3阳光自动收集"></a> 3.阳光自动收集</h1>
<h5 id="0"><a class="markdownIt-Anchor" href="#0"></a> 0.</h5>
<p>进行4Byte搜索， 阳光会有一个标志判断是否被点击， 没点击时为0， 点击后为1。(不过点了阳光马上暂停好像找不出来，需要等一会)。</p>
<h5 id="1-2"><a class="markdownIt-Anchor" href="#1-2"></a> 1.</h5>
<p>找到阳光是否被点击的标志位后， 查看“什么访问了这个地址”， 发现一些有趣的数据,（节选）：</p>
<blockquote>
<p>若干个（cmp byte ptr [ebx+50],00 出现次数：非常非常多次）<br />
cmp byte ptr [ebx+50],00 出现次数：x (后跟jne)<br />
mov byte ptr [ebp+50],01 出现次数：x</p>
</blockquote>
<p>其中下方两行，每点击一次阳光，出现次数都加一。猜测时点击阳光时先判断阳光点击标志位是否=1（等价于标志位是否!=0），如果不为0，则跳转，<br />
否则进行第三行操作把标志位置1。</p>
<h5 id="2-2"><a class="markdownIt-Anchor" href="#2-2"></a> 2.</h5>
<p>然后联想到还有很多个出现非常多次的“cmp byte ptr [ebx+50],00”， 说明游戏会经常检验阳光是否被点击，<br />
那么猜想，检测到阳光被点击后，游戏应该会进行收集操作，很可能有一个cmp后会跟收集阳光操作。<br />
于是把其中一个“cmp byte ptr [ebx+50],00”后面的jne改为je（由 <strong>if 标志位!=0-阳光被点击</strong> 则跳转到收集操作 改为<br />
<strong>if 标志位==0-阳光不被点击</strong> 则跳转到收集操作）， 或者改成jmp也行</p>
<h5 id="3-2"><a class="markdownIt-Anchor" href="#3-2"></a> 3.</h5>
<p>所以， 只要把popcapgame1.exe+3158F位置的jne改为je，即可实现阳光的自动收集</p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://example.com/1111/11/11/C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%EF%BC%88%E6%9C%89%E4%B8%80%E7%82%B9pp%EF%BC%89%E5%AE%9E%E7%8E%B0PVZ%E4%B8%80%E4%BB%A3%E4%BF%AE%E6%94%B9%EF%BC%8C%E6%8E%A2%E7%B4%A2%E8%AE%B0%E5%BD%95%20(%E9%9A%8F%E7%BC%98%E6%9B%B4%E6%96%B0)/" data-id="cl2uhoeb30001e4j3cnd9am51" class="article-share-link">分享</a>
      
      
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/OldBlog-Before20220505/" rel="tag">OldBlog(Before20220505)</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E5%86%85%E5%AD%98%E4%BF%AE%E6%94%B9/" rel="tag">内存修改</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/%E9%80%86%E5%90%91/" rel="tag">逆向</a></li></ul>

    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/1444/11/11/%E3%80%90%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95%E3%80%91%E3%80%90python%E3%80%91%E3%80%90opencv%E3%80%91%E8%87%AA%E5%AD%A6%E7%AE%80%E8%A6%81%E8%AE%B0%E5%BD%95%EF%BC%88%E6%9C%AA%E5%AE%8C%EF%BC%89/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">上一篇</strong>
      <div class="article-nav-title">
        
          【已重置】【学习记录】【python】【opencv】自学简要记录
        
      </div>
    </a>
  
  
    <a href="/1111/11/11/LCT/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">下一篇</strong>
      <div class="article-nav-title">LCT</div>
    </a>
  
</nav>

  
</article>



</section>
        
          <aside id="sidebar">
  
    <div class="widget-wrap">
  <h3 class="widget-title"></h3>
  <div class="widget">
    <h1 class="blog-title">蓝湖畔淅淅沥沥的雨</h1>
    <h2 class="blog-subtitle">All tragedy erased, I see only wonders...</h2>
    <ul class="blog-link">
     
          <a href="/" title="Home">
            <li>主页</li>
          </a>
        
          <a href="/archives" title="Archives">
            <li>归档</li>
          </a>
        
          <a href="/categories" title="Categories">
            <li>分类</li>
          </a>
        
          <a href="/tags" title="Tags">
            <li>标签</li>
          </a>
        
          <a href="/knightabout" title="Knightabout">
            <li>关于</li>
          </a>
        
          <a href="/bridges" title="Bridges">
            <li>传送门</li>
          </a>
        
          <a href="/announcement" title="Announcement">
            <li>公告</li>
          </a>
        
    </ul>
  </div>
</div>

  
    <div class="widget-wrap">
  <h3 class="widget-title"></h3>
  <div class="widget">
    <img class="avatar" src="/images/avatar.png">
    <h2 class="author">StarsWhisper</h2>
    <h3 class="description"></h3>
    <div class="count-box">
      <a href="/archives"><div><strong>75</strong><br>文章</div></a>
      <a href="/categories"><div><strong>31</strong><br>分类</div></a>
      <a href="/tags"><div><strong>56</strong><br>标签</div></a>
    </div>



    <div class="social-link">
      
        <a class="hvr-bounce-in" href="https://github.com/Wldcmzy" target="_blank" title="Github">
          Github
        </a>
      
        <a class="hvr-bounce-in" href="https://blog.csdn.net/wldcmzy" target="_blank" title="CSDN">
          CSDN
        </a>
      
        <a class="hvr-bounce-in" href="https://space.bilibili.com/83743701" target="_blank" title="bilibili(无技术和学习内容)">
          bilibili(无技术和学习内容)
        </a>
      
    </div>

    <div class="friend-link">
      <h2>友情链接</h2>
      
        <a class="hvr-bounce-in" href="https://shanamaid.github.io/" target="_blank" title="夏娜主题作者的博客">
          夏娜主题作者的博客
        </a>
      
    </div>
  </div>
</div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy;2021 - 2022 StarsWhisper<br>
      由<a href="http://hexo.io/" target="_blank">Hexo</a>强力驱动 | 
      主题-<a target="_blank" rel="noopener" href="https://github.com/ShanaMaid/hexo-theme-shana">Shana</a>(但是魔改)
      
    </div>
    
  </div>
</footer>
    </div>
    

<script src="//apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="//apps.bdimg.com/libs/wow/0.1.6/wow.min.js"></script>
<script>
new WOW().init();
</script>   


  
<link rel="stylesheet" href="/plugin/fancybox/jquery.fancybox.css">

  
<script src="/plugin/fancybox/jquery.fancybox.pack.js"></script>




  
<link rel="stylesheet" href="/plugin/galmenu/GalMenu.css">

  
<script src="/plugin/galmenu/GalMenu.js"></script>

  <div class="GalMenu GalDropDown">
      <div class="circle" id="gal">
        <div class="ring">
          
            <a href="/announcement" title="" class="menuItem">公告</a>
          
            <a href="/tags" title="" class="menuItem">标签</a>
          
            <a href="/categories" title="" class="menuItem">分类</a>
          
            <a href="/archives" title="" class="menuItem">归档</a>
          
            <a href="/knightabout" title="" class="menuItem">关于</a>
          
            <a href="/bridges" title="" class="menuItem">传送门</a>
          
        </div>
        
          <audio id="audio" src="#"></audio>
        
      </div> 
</div>
<div id="overlay" style="opacity: 1; cursor: pointer;"></div>
  <script type="text/javascript">var items = document.querySelectorAll('.menuItem');
    for (var i = 0,
    l = items.length; i < l; i++) {
      items[i].style.left = (50 - 35 * Math.cos( - 0.5 * Math.PI - 2 * (1 / l) * i * Math.PI)).toFixed(4) + "%";
      items[i].style.top = (50 + 35 * Math.sin( - 0.5 * Math.PI - 2 * (1 / l) * i * Math.PI)).toFixed(4) + "%"
    }</script>
<script type="text/javascript">
  $(document).ready(function() {
    $('body').GalMenu({
      'menu': 'GalDropDown'
    })
  });
</script>

  <section class="hidden-xs"> 
  <ul class="cb-slideshow"> 
    <li><span>苟利</span></li> 
    <li><span>国家</span></li> 
    <li><span>生死以</span></li> 
    <li><span>岂能</span></li> 
    <li><span>祸福</span></li> 
    <li><span>趋避之</span></li> 
  </ul>
</section>

<script src="/js/script.js"></script>




  </div>
</body>
</html>